﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using vudu.Presentacion.Contrato.VU_02_Gestionar_Escuelas;
using vudu.Logica.Fachada;
using System.Text.RegularExpressions;

using vudu.ClasesDominio;

namespace vudu.Presentacion.Presentador.VU_02_Gestionar_Escuelas
{
    public class PresentadorAgregarEscuela
    {
        public IContratoAgregarEscuela _vista;
        private EnlaceLogico _fachada;
        private String _nombre, _descripcion, _director, _telefono, _codigo, _direccion;
        private String _mensajeExitoso = "Operación Exitosa";
        private String _mensajeErrorBd = "Operación Fallida: Error en base de datos";
        private String _mensajeErrorDatos = "Operación Fallida: Error en datos Ingresados";
        private int _longitudTelefono = 7;
        private int _longitudCodigo = 4;

        public PresentadorAgregarEscuela(IContratoAgregarEscuela vista, EnlaceLogico fachada)
        {
            _vista = vista;
            _fachada = fachada;
            //_vista.Usuario.Text = _fachada.RolActual.MiUniversidad.Nombre; 
            // Comentado por el Grupo 4 ya que Rol Ahora es una Clase Abstracta y por lo Tanto es la Clase Padre
        }

        /// <summary>
        /// Se valida el formulario y se envia a agregar escuela
        /// </summary>
        /// <returns></returns>
        public void AgregarEscuela()
        {
            if (ValidarFormulario())
            {
                _telefono = _codigo + _telefono;
                Escuela nuevaEscuela = new Escuela(_nombre, _descripcion, _telefono, _director, _direccion, 0);
                // GRUPO 4 COMENTO EL CODIGO ya que la implementacion ahora de la clase rol es distinta
                //la clase rol es clase padre de las clases controladoras de escuela,universidad,estudiante y profesor _fachada.RolActual.MiUniversidad.Nombre
                
                //CABLE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!-------------->
                int agregar = _fachada.AgregarEscuela(nuevaEscuela,"Universidad Catolica Andres Bello");

                if (!agregar.Equals(0))
                {
                    _vista.Mensaje.Text = _mensajeExitoso;
                    _vista.Mensaje.CssClass = "transaccionExitosa";
                    _vista.Mensaje.ForeColor = System.Drawing.Color.Green;
                }
                else
                {
                    _vista.Mensaje.Text = _mensajeErrorBd;
                    _vista.Mensaje.CssClass = "transaccionFallida";
                    _vista.Mensaje.ForeColor = System.Drawing.Color.Red;
                }
            }
            else
            {
                _vista.Mensaje.Text = _mensajeErrorDatos;
                _vista.Mensaje.CssClass = "transaccionFallida";
                _vista.Mensaje.ForeColor = System.Drawing.Color.Red;
            }
        }

        #region Funciones utilizadas para validar informacion del formulario

        /// <summary>
        /// Funcion que valida que la informacion del formulario este correcta
        /// </summary>
        /// <returns></returns>
        public bool ValidarFormulario()
        {
            bool respuesta = true;
            bool validaNombre = ValidarCampoNombreEscuela();
            bool validaDirectos = ValidarCampoDirectorEscuela();
            bool validaTelefono = ValidarCampoTelefonoEscuela();
            bool validaDescripcion = ValidarCampoDescripcionEscuela();
            bool validaDireccion = ValidarCampoDireccionEscuela();

            respuesta = validaNombre && validaDirectos && validaTelefono && validaDescripcion & validaDireccion; 
            
            return respuesta ;
        }

        /// <summary>
        /// Funcion que valida si la informacion de Campo nombre es correcta.
        /// </summary>
        /// <param name="numero"></param>
        /// <returns>retorna true si es, false caso contrario.</returns>
        public bool ValidarCampoNombreEscuela()
        {
            _nombre = _vista.Nombre.Text;
            Regex regex = new Regex(@"(\s)");
            int espacios = regex.Matches(_nombre).Count;


            if (_nombre.Length == 0 || espacios == _nombre.Length)
            {
                _vista.LabelNombre.ForeColor = System.Drawing.Color.Red;
                return false;
            }
            else
            {
                _vista.LabelNombre.ForeColor = System.Drawing.Color.Black;
                return true;
            }
        }
           
    
        /// <summary>
        /// Funcion que valida si la informacion de Campo director es correcta.
        /// </summary>
        /// <param name="numero"></param>
        /// <returns>retorna true si es, false caso contrario.</returns>
        public bool ValidarCampoDirectorEscuela()
        {
            _director = _vista.Director.Text;
            Regex regex = new Regex(@"(\s)");
            int espacios = regex.Matches(_director).Count;

            if (_director.Length == 0 || espacios == _director.Length)
            {
                _vista.LabelDirector.ForeColor = System.Drawing.Color.Red;
                return false;
            }
            else
            {
                _vista.LabelDirector.ForeColor = System.Drawing.Color.Black;
                return true;
            }   
        }

        /// <summary>
        /// Funcion que valida si la informacion de Campo descripcion es correcta.
        /// </summary>
        /// <param name="numero"></param>
        /// <returns>retorna true si es, false caso contrario.</returns>
        public bool ValidarCampoDescripcionEscuela()
        {
            _descripcion = _vista.Descripcion.Text;
            Regex regex = new Regex(@"(\s)");
            int espacios = regex.Matches(_descripcion).Count;

            if (_descripcion.Length == 0)
            {
                _vista.LabelDescripcion.ForeColor = System.Drawing.Color.Black;
                return true;
            }
            if (espacios == _descripcion.Length)
            {
                _vista.LabelDescripcion.ForeColor = System.Drawing.Color.Red;
                return false;
            }
            else
            {
                _vista.LabelDescripcion.ForeColor = System.Drawing.Color.Black;
                return true;
            }
        }

        /// <summary>
        /// Funcion que valida si la informacion de Campo direccion es correcta.
        /// </summary>
        /// <param name="numero"></param>
        /// <returns>retorna true si es, false caso contrario.</returns>
        public bool ValidarCampoDireccionEscuela()
        {
            _direccion = _vista.Direccion.Text;
            Regex regex = new Regex(@"(\s)");
            int espacios = regex.Matches(_direccion).Count;

            if (_direccion.Length == 0 || espacios == _direccion.Length)
            {
                _vista.LabelDireccion.ForeColor = System.Drawing.Color.Red;
                return false;
            }
            else
            {
                _vista.LabelDireccion.ForeColor = System.Drawing.Color.Black;
                return true;
            }
        }

        /// <summary>
        /// Funcion que valida si la informacion de Campo telefono es correcta.
        /// </summary>
        /// <param name="numero"></param>
        /// <returns>retorna true si es, false caso contrario.</returns>
        public bool ValidarCampoTelefonoEscuela()
        {
            _telefono = _vista.Telefono.Text;
            _codigo = _vista.Codigo.Text;
            bool validacion = true;

            if ((_telefono.Length < _longitudTelefono) || (_codigo.Length < _longitudCodigo))
            {
                _vista.LabelTelefono.ForeColor = System.Drawing.Color.Red;
                validacion = validacion && false;
                return false;
            }
            if (!ValidarSiEsNumero(_telefono))
            {
                _vista.LabelTelefono.ForeColor = System.Drawing.Color.Red;
                validacion = validacion && false;
                return false;
            }
            if (!ValidarSiEsNumero(_codigo))
            {
                _vista.LabelTelefono.ForeColor = System.Drawing.Color.Red;
                validacion = validacion && false;
                return false;
            }
            if (validacion)
            {
                _vista.LabelTelefono.ForeColor = System.Drawing.Color.Black;
                return true;
            }
            return validacion;
        }

        /// <summary>
        /// Funcion que valida si el telefono es un numero.
        /// </summary>
        /// <param name="numero"></param>
        /// <returns>retorna true si es, false caso contrario.</returns>
        public bool ValidarSiEsNumero(string numero)
        {
            try
            {
                Convert.ToInt32(numero);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        #endregion
    }
}